Python 类快速排序方法找到第定n小数的方法

#coding=utf-8

import random

def select(data, n):
    "Find the nth rank ordered element (the least value has rank 0)."

    data = list(data)

    if not 0 <= n < len(data):
        raise ValueError('not enough elements for the given rank')

    while True:
        pivot = random.choice(data)
        pcount = 0
        under, over = [], []
        uappend, oappend = under.append, over.append


#www.iplaypy.com
    for elem in data:
       if elem < pivot:

   uappend(elem)
       elif elem > pivot:

    oappend(elem)

    else:
       pcount += 1

      if n < len(under):
         data = under
      elif n < len(under) + pcount:
         return pivot

    else:
       data = over

n -= len(under) + pcount